/*
* Sterownik_nawadniania.c
*
* Created: 2012-10-04 18:50:51
*  Author: ur
*/


#include <avr/io.h>
#include <avr/pgmspace.h>
#include <stdlib.h>
#include <avr/eeprom.h>
#include <avr/interrupt.h>
#include "time.h"
#include "I2C.h"
#include "key.h"
#include "Lcd.h"
#include "podlewanie.h"
#include "obsluga_menu.h"
#include "Sterownik nawadniania.h"
#include "key.h"
#include "enkoder.h"
#include <avr/wdt.h>



void timer0_init (void);
volatile uint8_t sysclock ;

volatile uint8_t timer_lcd;

///////////////////////////////////////////
//zmienne globalne
////////////////////////////////////////////

volatile uint8_t update_time=0;


int main(void)
{	/////////////////
	//sekcja testowa
	/////////////////
//    	while(1)
//  praca_reczna_poj_stacja_start ();
// 	 
// 	 
 	
 
// // 	
	///////////////////
	//koniec sekcji
	///////////////////
	LCD_Initalize();
	LCD_GoTo(0,0);
	LCD_WriteText((uint8_t*)"INIT KEY");
 	
	//wdt_enable(WDTO_2S );			//odpalenie watchdoga
	init_key();
	LCD_GoTo(0,0);
	LCD_WriteText((uint8_t*)"ENKODER INIT");
	encode_init();
	
	t_stany_automatu stan_automatu;
	LCD_GoTo(0,0);
	LCD_WriteText((uint8_t*)"REJESTRACJA AUTOMATU");
	register_state_machine(& stan_automatu); // rejestracja automatu
	LCD_GoTo(0,0);
	LCD_WriteText((uint8_t*)"INIT PODLEWANIE");
	init_podlewanie();							//inicjalizacja portow oraz obsluga automatu i zmienych z eepromu
	LCD_GoTo(0,0);
	LCD_WriteText((uint8_t*)"INIT MENU");
	menu_init();
	
	LCD_GoTo(0,0);
	LCD_WriteText((uint8_t*)"INIT TIMER");
	timer0_init();			//inicjalizacja timera 0 na 10ms
	LCD_GoTo(0,0);
	LCD_WriteText((uint8_t*)"INIT RTC        ");
	_delay_ms(1000);
	 init_inter_rtc();		//inicjalizacja sprzetowego przerwania od rtc
	
	LCD_GoTo(0,0);
	LCD_WriteText((uint8_t*)"START");
	
	_delay_ms(1000);
	

	
	sei();

	while (1)
	{	
		
		if (update_time)
		{
			increment_time ();
			
			if(return_wsk_state_machine()->stan_funkcja_glowna==RUN)
			{
			inkrement_timer();
			};				
			
			
			update_time=0;
		};
		
		
 		funkcja_glowna();			//sterowanie podlewaniem
		
		wybrana_funkcja(wcisniety_klawisz());	//obsluga menu
 		
		if(update_display ==1)			//sterowanie wyswietlaniem
		{
			display_bufor();
			update_display=0;
		}		
	
	wdt_reset();
	}
	
	
}



/*


int main(void)
{	
		
	
	
//petla glowna programu	
    while(1)
    {//zdarzenia zalezne od czasu
		
		
		
	//zdarzenia niezalezne od czasu	
	
	//obsluga klawiszy
// 	 if(1)key_up ();
// 	 if(1)key_down ();
// 	 if(1)key_esc ();
// 	 if(1)key_ok	();
// 	 if(1)key_menu();
// 	 if(1)display_lcd();

        
    }
};  //koniec funkcji main
	

*/

//przerwanie odmierzajace czas







//przerwanie z licznika 30ms

void timer0_init(void)
{
	TCCR0=(1<<WGM01)|(0<<WGM00); 
	OCR0= 10;    //78=100Hz;
	TIMSK=(1<<OCIE0);
	TCCR0|=(1<<CS00)|(0<<CS01)|(1<<CS02);	
}


 ISR(TIMER0_COMP_vect)
{
	if(6<++timer_lcd) //czestotliwosc 50Hz
	{
		update_display=1;
		timer_lcd=0;
	}	
	
	czytaj_klawisze();
	
}


ISR(INT0_vect)
{
	//increment_time ();
	update_time=1; // inkremetacja czasu o jedna sekunde w petli glonwej
	
	
}
